有沒有做完上版後,被罵沒檢查就放流量? 有沒有服務上線出事後,都是user反映才知道?
有了Service Discovery 怎麼能夠少了 Service Health Check 的功能呢?
所以今天會來介紹Service Health Check, 不過昨天你們有觀察到service status 是正常的綠燈嗎?即使Nginx停下來也是綠燈,如果有仔細去看它health check的內容寫著是Agent alive and reachable
, 意思是這個Consul client是活著的可以連的到,沒辦法確認服務是正常的。
檢查的方法一共有7種:
Script + Interval: 可以撰寫script, 加上設定每間格多久做一次check, 但是exit code有規定的格式。
HTTP + Interval: 透過HTTP GET取得http response code, 2XX表示passing,429 Too ManyRequests is warning,其他表示failing。
TCP + Interval: 透過TCP連結到指定的IP:Port, 檢查是否連接成功。
Time to Live (TTL): 在TTL時間內,應用程式需主動送GET request到agent http endpoint, 如果agent http endpoint,在TTL時間內未報觸發就會視為critical state.
Docker + Interval: 可以指定container id,針對特定的container做檢查。
gRPC + Interval: 支援gRPC health checking protocol.
Alias: 使用在當有兩個service有關聯時,可以使用alias來做檢測。
在我們昨天的web-service.hcl裡加入check
service {
name = "ithome-web"
tags = ["web","http"]
port = 80
token = "1d177b09-4528-bdb0-e5b0-e61ab7aa140a"
checks = [{
name = "ithome-check"
http = "http://10.168.1.189/index.htm"
interval = "3s"
timeout = "1s"
},
{
name = "Check 80 port"
tcp = "10.168.1.189:80"
interval = "6s"
timeout = "3s"
}
]
}
這裡我加入了兩個check,分別是HTTP與TCP, "ithome-check"
檢查我的首頁,"Check 80 port"
檢查80 port,
再執行consul reload
重新載入設定。
查看結果
大家可以去把其中一台的Nginx停下來,查看health check是否有生效,
再去做dig @10.168.1.175 -p 8600 ithome-web.service.consul
查看結果。